//1. 安装 mongoose
//2. 导入 mongoose
const mongoose = require("mongoose")

// 设置 strictQuery 为 true 去除提示
mongoose.set("strictQuery", true)

//3. 连接 mongodb 服务                        数据库的名称
mongoose.connect("mongodb://127.0.0.1:27017/bilibili")

mongoose.connection.on("open", () => {
  let BookSchema = new mongoose.Schema({
    name: String,
    author: String,
    price: Number,
    is_hot: Boolean,
  })

  //6. 创建模型对象，对文档操作的封装对象
  // 参数一数据库文档名称 参数二类型限制
  let BookModel = mongoose.model("novel", BookSchema)

  // 可实则条件查询 findOne查询一个
  /*
    lt20表示小于20 price:{$lt:20}
    > $gr 
    >= $gte
    <= $lte
    !== $ne
    $or 筛选或者 { $or: [{ author: "曹雪芹" }, { author: "余华" }] },
    $and 筛选同时满足
    正则 /条件/  { name:/三/ },
  */
  /*
  BookModel.find(
    { name:/三/ },
    (err, data) => {
      // 判断
      if (err) {
        console.log("更新失败~~~");
        return;
      }
      // 输出 data
      console.log(data);
    }
  );
  */
  // BookModel.find({is_hot: false}, (err, data) => {});
  // 自定义读取（读取部分数据）
  // .select({ name: 1, author: 1,_id:0 }) 只读取name和author属性
  // .sort({ price:1 }) 排序 1升序 0降序
  // 可以链式 .select({ name: 1, author: 1,_id:0 }).sort
  // .limit 限制读取多少个
  // .skip 跳过多少位
  BookModel.find()
    .sort({ price: 1 })
    .limit(3)
    .exec((err, data) => {
      if (err) return
      console.log(data, "xxxx")
    })
})

// 设置连接错误的回调
mongoose.connection.on("error", () => {
  console.log("连接失败")
})

// 设置连接关闭的回调
mongoose.connection.on("close", () => {
  console.log("连接关闭")
})
